/**
 *
 */
package webapps.study.domain.repository;

import java.io.Serializable;
import java.util.List;

import com.db4o.query.Query;


/**
 * 泛型DAO
 *
 * @author Kevin.Huang
 * @date 2007-9-26
 * @param <K>
 */
public interface IGenericDAO< K > {

	/**
	 * 通过ID获取实例
	 *
	 * @param id
	 * @return
	 */
	K findById(Serializable id);

	/**
	 * 返回所有此类型的实例
	 *
	 * @return
	 */
	List< K > findAll();

	/**
	 * 根据样例返回实例
	 *
	 * @param exampleInstance
	 * @return
	 */
	List< K > findByExample(K exampleInstance);

	/**
	 * 根据query返回实例
	 *
	 * @param query
	 * @return
	 */
	List< K > findByQuery(Query query);

	/**
	 * 根据query和page分页查询
	 *
	 * @param query
	 * @param page
	 * @return
	 */
	List< K > findByQuery(Query query, int index, int count);

	/**
	 * 根据query计算实例总数
	 *
	 * @param query
	 * @return
	 */
	Integer findCountByQuery(Query query);

	/**
	 * 更新及保存实例
	 *
	 * @param entity
	 * @return
	 */
	K saveAndUpdate(K entity);

	/**
	 * 删除实例
	 *
	 * @param entity
	 */
	void delete(K entity);

}
